#

| Chapter 38 Starting, Stopping, and Killing Processes |

## 38.9 Killing Foreground Jobs

You probably know that typing CTRL-c (38.8) will terminate your foreground job. But what actually happens when you type CTRL-c?

When you type CTRL-c, you're sending the INT (interrupt) signal (38.8) to the foreground process. Most well-designed programs "catch" the interrupt signal - which means that the program installs some special function (a "signal handler") that is called whenever a signal arrives. The signal handler normally closes all open files, resets your terminal properly (if needed), and does anything else necessary so that the program can depart from this world at peace. Then the program terminates. The QUIT signal, sent by CTRL-`\`, works similarly but also makes a core file (52.9) for debugging.

Of course, it's possible for the signal handler to do something else entirely: it's possible for the program to decide not to quit, or to implement some truly bizarre feature. In fact, editors like vi or Emacs almost always ignore most signals. The trap (44.12) command handles signals in the Bourne shell.

Whenever you send a signal from the keyboard, it's sent to all processes in the same process group (38.3). This may include the program's child processes, but may not. And, of course, child processes can choose to ignore signals on their own. But more often than not, killing the parent process kills its children.

Article 5.9 explains how to set the key that sends these and other signals. The kill (38.10) command also sends signals.

- ML, JP

38.8 What Are Signals? |  | 38.10 Destroying Processes with kill